package com.hangxin.basic.web;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.sf.json.JSONArray;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.hangxin.basic.model.LoginInfo;
import com.hangxin.basic.service.CompanyService;
import com.hangxin.basic.service.MenuService;
import com.hangxin.basic.service.UserLoginService;
import com.hangxin.basic.util.BackType;
import com.hangxin.commons.util.MD5Util;
import com.hangxin.commons.web.BasicAction;
import com.hangxin.system.model.Syslog;
import com.hangxin.system.service.SyslogService;

/**
 * 
 * 类名称：UserLoginAction.java
 * <P/>
 * 类描述： 用户有关的操作
 * <P/>
 * 创建时间：2013年3月10日
 * <P/>
 * 创建人： 段志杨
 * <P/>
 * 联系方式： 315874529@qq.com
 * <P/>
 * 修改人：无
 * <P/>
 * 修改时间：无
 * <P/>
 * 修改备注：无
 * <P/>
 * 版本：v1.0
 * 
 */
@Controller
public class UserLoginAction extends BasicAction {
	static final Logger logger = LoggerFactory.getLogger(UserLoginAction.class);

	@Resource
	private UserLoginService userLoginServiceImpl;// 用户操作Service

	@Resource
	private MenuService MenuServiceImpl;// 资源菜单Service

	@Resource
	private CompanyService companyServiceImpl;// 组织机构Service

	@Resource
	private SyslogService syslogServiceImpl;// 系统日志操作的Service

	/**
	 * 
	 * 功能描述：加载Top
	 * <P/>
	 * 创建时间：2013年3月12日
	 * <P/>
	 * 创建人： 段志杨
	 * <P/>
	 * 联系方式： 315874529@qq.com
	 * 
	 * @return
	 */
	@RequestMapping(value = "/topAction")
	public String top() {
		return "Top";
	}

	@RequestMapping(value = "/footAction")
	public String footAction() {
		return "Foot";
	}

	@RequestMapping(value = "/mainAction")
	public String mainAction() {
		return "Main";
	}

	@RequestMapping(value = "/menuAction")
	public String findMenu() {
		return "Menu";
	}

	@RequestMapping(value = "/mianAction")
	public String mianAction() {
		return "Main";
	}

	@RequestMapping(value = "/mianTabAction")
	public String indexImageAction() {
		return "MainTab";
	}

	@RequestMapping(value = "/findHideAction")
	public String findHide() {
		return "hide";
	}

	@RequestMapping(value = "/indexfrAction")
	public String indexfr() {
		return "index";
	}

	/**
	 * 
	 * 功能描述：加载Main
	 * <P/>
	 * 创建时间：2013年3月12日
	 * <P/>
	 * 创建人： 段志杨
	 * <P/>
	 * 联系方式： 315874529@qq.com
	 * 
	 * @return
	 */
	@RequestMapping(value = "/belowAction")
	public String below() {
		return "Below";
	}

	/**
	 * 
	 * 功能描述：实现登录
	 * <P/>
	 * 创建时间：2013年3月10日
	 * <P/>
	 * 创建人： 段志杨
	 * <P/>
	 * 联系方式： 315874529@qq.com
	 * 
	 * @param request
	 * @param username
	 *            用户名
	 * @param password
	 *            密码
	 * @param model
	 *            实体类
	 * @return
	 */
	@RequestMapping(value = "/loginAction")
	public String loginAction(HttpServletRequest request, String username,
			String password, String yzm, Model model, HttpSession session) {
		LoginInfo logininfo = null;
		String pass = MD5Util.encode(password);
		if (userLoginServiceImpl.ifExist(username, pass) > 0) {
			logininfo = userLoginServiceImpl.findUserLogin(username, pass);
			Map<String, Object> company = companyServiceImpl
					.companyFindById(logininfo.getCompanyid());
			if (logininfo != null) {
				if (logininfo.getState().equals("1")) {
					try {
						request.getSession().setAttribute("realname",
								logininfo.getRealName());
						request.getSession().setAttribute("lgid",
								logininfo.getId());
						request.getSession().setAttribute("applicant",
								logininfo.getApplicant());
						// request.getSession().setAttribute("companyname",
						// company.get("companyname"));
						if (company != null) {
							request.getSession().setAttribute("companyname",
									company.get("companyname"));
							request.getSession().setAttribute("taxno",
									company.get("taxno"));
							request.getSession().setAttribute("addresstel",
									company.get("addresstel"));
							request.getSession().setAttribute("account",
									company.get("account"));
							request.getSession().setAttribute("review",
									company.get("review"));
							request.getSession().setAttribute("payee",
									company.get("payee"));
							request.getSession().setAttribute("machineno",
									company.get("machineno"));
							request.getSession().setAttribute("speclimit",
									company.get("speclimit"));
							request.getSession().setAttribute("commlimit",
									company.get("commlimit"));
							request.getSession().setAttribute("invoiceType",
									company.get("invoiceType"));
							request.getSession().setAttribute("dbFlag", 0);//0:mysql版本；1：sqlserver版本
						}
						request.getSession().setAttribute("companyid",
								logininfo.getCompanyid());
						request.getSession().setAttribute("username", username);
						//添加系统操作日志
						StringBuffer content = new StringBuffer();
						content.append("用户：");
						content.append(logininfo.getRealName());
						content.append("，于");
						content.append(new SimpleDateFormat(
								"yyyy年MM月dd日HH时mm分ss秒").format((new Date()
								.getTime())));
						content.append("在IP为");
						content.append(request.getRemoteAddr());
						content.append("处登录系统");

						Syslog syslog = new Syslog(logininfo.getId(), logininfo.getRealName(), company.get("companyname").toString(), "用户登录", "用户登录", content.toString(), Long.parseLong(request.getSession().getAttribute("lgid").toString()));
						syslog.setAddtime(new Timestamp(new Date().getTime()));
						syslogServiceImpl.save(syslog);// 添加操作日志

		
						return "index";
					} catch (Exception e) {
						logger.info(e.getMessage());
						model.addAttribute("state", BackType.RETURN_CATCH);
						return "login";
					}
				} else {
					return "login";
				}
			}
		}
		return "login";

	}

	/**
	 * 
	 * 功能描述：转到登录界面
	 * 
	 * <P/>
	 * 创建时间：2014年3月10日
	 * <P/>
	 * 创建人： 段志杨
	 * <P/>
	 * 联系方式： 315874529@qq.com
	 * 
	 * @return
	 */
	@RequestMapping(value = "/loginOutAction", method = RequestMethod.POST)
	public String loginOut(HttpSession session) {
		session.invalidate();
		return "login";
	}

	/**
	 * 
	 * 功能描述：用户退出系统
	 * <P/>
	 * 创建时间：2013年3月11日
	 * <P/>
	 * 创建人： 段志杨
	 * <P/>
	 * 联系方式： 315874529@qq.com
	 * 
	 * @param request
	 *            请求
	 * @param session
	 *            当前用户会话
	 * @return
	 */
	@RequestMapping(value = "/exitAction")
	public String exit(HttpServletRequest request, HttpSession session) {
		session.invalidate();
		return "login";
	}

	/**
	 * 
	 * 功能描述：用户修改密码
	 * <P/>
	 * 创建时间：2014年4月14日
	 * <P/>
	 * 创建人： 杨春豪
	 * <P/>
	 * 联系方式： 550813852@qq.com
	 * 
	 * @param request
	 *            请求
	 * @param session
	 *            当前用户会话
	 * @return
	 */
	@RequestMapping(value = "/changepasswd")
	public String changepassword(HttpServletRequest request, HttpSession session) {
		return "user/changepasswd";
	}

	/**
	 * 
	 * 功能描述：用户修改密码保存
	 * <P/>
	 * 创建时间：2014年4月14日
	 * <P/>
	 * 创建人： 杨春豪
	 * <P/>
	 * 联系方式： 550813852@qq.com
	 * 
	 * @param request
	 *            请求
	 * @param session
	 *            当前用户会话
	 * @return
	 */
	@RequestMapping(value = "/changepasswd01")
	public String changepassword01(HttpServletRequest request,
			HttpSession session, String oldpassword, String newpassword,
			Model model) {
		String username = session.getAttribute("username").toString();
		String oldpass = MD5Util.encode(oldpassword);
		Integer itger = userLoginServiceImpl.ifExist(username, oldpass);
		if (itger > 0) {
			String logid = session.getAttribute("lgid").toString();
			String pass = MD5Util.encode(newpassword);
			userLoginServiceImpl.changepassword(pass, logid);
			model.addAttribute("changepassright", "1");
			return "user/changepasswd";
		}
		model.addAttribute("oldpasswrong", "1");
		return "user/changepasswd";
	}

	/**
	 * 
	 * 功能描述：资源菜单
	 * <P/>
	 * 创建时间：2013年3月11日
	 * <P/>
	 * 创建人： 段志杨
	 * <P/>
	 * 联系方式： 315874529@qq.com
	 * 
	 * @param session
	 *            当前用户会话
	 * @return
	 */
	@RequestMapping(value = "/findMenuAction")
	public Object forJson(HttpSession session, HttpServletResponse response,
			HttpServletRequest request) {
		LoginInfo logininfo = new LoginInfo();
		logininfo.setId((Long) session.getAttribute("lgid"));
		List<Map<String, Object>> listLogin = MenuServiceImpl
				.findListByUserId(logininfo);
		StringBuffer sbf = new StringBuffer();
		sbf.append("[");
		for (Map<String, Object> map : listLogin) {
			sbf.append("{id:" + map.get("id") + ",");
			Integer id = Integer.parseInt(map.get("id").toString());
			if (id == 1) {
				sbf.append("open:true,");
			}
			sbf.append("pId:" + map.get("parentId") + ",");
			sbf.append("name:'" + map.get("name") + "',");
			if (map.get("url") != null && !"".equals(map.get("url"))) {
				sbf.append("url:'" + map.get("url") + "',");
			}
			if (map.get("images") != null && !"".equals(map.get("images"))) {
				sbf.append("icon:'" + map.get("images") + "',");
			}
			sbf.append("target:'maintabs'},");
		}
		sbf.delete(sbf.length() - 1, sbf.length());
		sbf.append("]");
		response.setCharacterEncoding("utf-8");
		JSONArray array = new JSONArray();
		PrintWriter out = null;
		try {
			out = response.getWriter();
		} catch (IOException e) {
			logger.info(e.getMessage());
		}
		array = JSONArray.fromObject(sbf.toString());
		out.print(array);
		return null;
	}
}
